/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Model;

import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;

/**
 * @author Alan Carlos
 * @author João Vilas Boas
 */
/*Classe criada com o objetivo de representar cada token 
identificado no codigo fonte.
O objeto token pode ser contruido de duas formas:
1- Para inserção numa tabela de simbolos representada por uma ArrayList, onde
o objeto Token possuirá atributos para armazenar seu lexema, seu tipo,
a linha e a coluna em que se encontra.
2-Para inserção numa tabela de simbolos representada por uma Tabela Hash, onde
o objeto Token possuirá atributos para armazenar seu lexema, seu tipo e uma 
lista encadeada de objetos do tipo IndexTexto para armazenar cada posição em que
o token pode se encontrar repetido no códgo fonte
*/


public class Token {

    public static final int IDENTIFICADOR = 1;
    public static final int PALAVRA_RESERVADA = 2;
    public static final int SIMBOLO = 3;
    public static final int STRING = 4;
    public static final int CARACTERE = 5;
    public static final int OPERADOR = 6;
    public static final int DELIMITADOR = 7;
    public static final int NUMERO = 8;
    private String lexema;
    private LinkedList<IndexTexto> index;
    private int linha;
    private int coluna;
    private int tipo;
    private int indice;

    /*UTILIZAR CODIGOS DE TIPO PARA LEXEMAS:
     tipo = 1 : IDENTIFICADOR
     tipo = 2 : PALAVRA RESERVADA 
     tipo = 3 : SIMBOLO
     tipo = 4 : STRING
     tipo = 5 : CARACTERE
     tipo = 6 : OPERADOR
     tipo = 7 : DELIMITADOR
     tipo = 8 : NUMERO
     */
    
    //Construtor de Token para ser utilizado quando for inserir numa tabela hash
    public Token(String lexema, LinkedList index, int tipo) {
        this.lexema = lexema;
        this.index = index;
        this.tipo = tipo;

    }

    //Construtor de Token para ser utilizado quando for inserir numa arraylist
    public Token(String lexema, int linha, int coluna, int tipo, int indice) {
        this.lexema = lexema;
        this.linha = linha;
        this.coluna = coluna;
        this.tipo = tipo;
        this.indice = indice;
       

    }

    public int getLinha() {
        return linha;
    }

    public void setLinha(int linha) {
        this.linha = linha;
    }

    public int getColuna() {
        return coluna;
    }

    public void setColuna(int coluna) {
        this.coluna = coluna;
    }

    public String getLexema() {
        return lexema;
    }

    public void setLexema(String lexema) {
        this.lexema = lexema;
    }

    public LinkedList<IndexTexto> getListIndex() {
        return index;
    }

    public void setListIndex(LinkedList index) {
        this.index = index;
    }

    public int getTipo() {
        return tipo;
    }

    public void setTipo(int tipo) {
        this.tipo = tipo;
    }

    public int getIndice() {
        return indice;
    }

    public void setIndice(int indice) {
        this.indice = indice;
    }
    

    @Override
    public int hashCode() {
        return super.hashCode(); //To change body of generated methods, choose Tools | Templates.
    }

    @Override
    public boolean equals(Object obj) {
        return super.equals(obj); //To change body of generated methods, choose Tools | Templates.
    }

}
